#include "bsp_uart.h"

//先老方法寄存器写一下uart
static void UART_GPIO_Init()
{
    IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX,0);
    IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX,0x10b0);

    IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX,0);
    IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX,0x10b0);
}

void UART_Enable(UART_Type*uart)
{
    uart->UCR1 |= 1<<0;
}
void UART_Disable(UART_Type*uart)
{
    uart->UCR1 &= ~(1<<0);
}
void UART_SoftReset(UART_Type *base) 
{ 
    base->UCR2 &= ~(1<<0); /* 复位 UART */ 
    while((base->UCR2 & 0x1) == 0); /* 等待复位完成 */ 
} 

void UART_Init(UART_Type *uart,uint32_t bound)
{
    UART_GPIO_Init();
    UART_Disable(uart);
    UART_SoftReset(uart);
    uart->UCR1 = 0; /* 先清除 UCR1 寄存器 */
    uart->UCR1 &= ~(1<<14); /* 关闭自动波特率检测 */ 
/*
设置 UART 的 UCR2 寄存器，设置字长，停止位，校验模式，关闭硬件流控bit14:1 忽略 RTS引脚
bit8:0  关闭奇偶校验
bit6:0  1位停止位
bit5:1  8位数据位
bit2:1 打开发送
bit1:1 打开接收
*/
    uart->UCR2 |= (1<<14) | (1<<5) | (1<<2) | (1<<1); 
    uart->UCR3 |= 1<<2; /* UCR3 的 bit2 必须为 1 */

    //设置115200
    uart->UFCR = 5<<7; /* ref freq 等于 ipg_clk/1=80Mhz */
    uart->UBIR = 71;
    uart->UBMR = 3124; 
    
#if 0
    uart_setbaudrate(uart, 115200, 80000000); /* 设置波特率 */
#endif

    UART_Enable(uart);
}

/* 
214 * @description : 发送一个字符 
215 * @param - c : 要发送的字符 
216 * @return : 无 
217 */ 
void putc(unsigned char c) 
{ 
    UART1->UTXD = c & 0XFF; /* 发送数据 */ 
    while(((UART1->USR2 >> 3) &0X01) == 0);/* 等待发送完成 */ 
}  
/* 
225 * @description : 发送一个字符串 
226 * @param - str : 要发送的字符串 
227 * @return : 无 
228 */ 
void puts(const char *str) 
{ 
    int i=0;
    for(i=0; str[i]!='\0';i++)
    {
        putc(str[i]);
    }
}  
 /* 
238 * @description : 接收一个字符 
239 * @param : 无 
240 * @return : 接收到的字符 
241 */ 
unsigned char getc(void) 
{ 
    while((UART1->USR2 & 0x1) == 0); /* 等待接收完成 */ 
    return UART1->URXD; /* 返回接收到的数据 */ 
} 
void raise(int sig_nr)
{
    
}
